﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using BolsaTalentos.BLL;

namespace InterfazBolsaTalentos.Empresa
{
    public partial class Perfil : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            this.PoblarCampos_Perfil();
            this.PoblarCampos_Contactos();
            this.PoblarCampos_Usuarios();
        }

        protected void Button_LogOff_Click(object sender, EventArgs e)
        {
            this.Session["UsuarioDeSesion"] = null;

            this.Response.Redirect("../General/Default.aspx");
        }
        protected void Button_ModificarPerfil_Click(object sender, EventArgs e)
        {
            try
            {
                ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Direccion = this.TextBox_Direccion.Text.Trim();
                ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Descripcion = this.TextBox_Descripcion.Text.Trim();

                ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Actualizar();

                this.Response.Redirect("Perfil.aspx");
            }
            catch (Exception) 
            {
                this.Label_MensajeErrorModificarPerfil.Text = "Intente modificar su perfil luego";
            }
        }
        protected void Button_AñadirContacto_Click(object sender, EventArgs e)
        {
            try
            {
                ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.AgregarContacto(Convert.ToInt32(this.DropDownList_TiposContactos.SelectedValue), this.TextBox_NuevoContacto.Text.Trim());

                this.Response.Redirect("Perfil.aspx");
            }
            catch (Exception)
            {
                this.Label_MensajeErrorAñadirContacto.Text = "Este contacto ya ha sido registrado";
            }
        }
        protected void Button_EliminarContacto_Click(object sender, EventArgs e)
        {
            try
            {
                ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.EliminarContacto(Convert.ToInt32(this.DropDownList_ContactosDeUsuario.SelectedValue));

                this.Response.Redirect("Perfil.aspx");
            }
            catch (Exception)
            {
                this.Label_MensajeErrorEliminarContacto.Text = "Intente eliminar este contacto luego";
            }
        }
        protected void Button_DesactivarUsuario_Click(object sender, EventArgs e)
        {
            if (((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).ID != Convert.ToInt32(this.GridView_UsuariosActivos.Rows[this.GridView_UsuariosActivos.SelectedIndex].Cells[1].Text))
            {
                try
                {
                    ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.DesactivarUsuarioEmpresa(Convert.ToInt32(this.GridView_UsuariosActivos.Rows[this.GridView_UsuariosActivos.SelectedIndex].Cells[1].Text));

                    this.Response.Redirect("Perfil.aspx");
                }
                catch (Exception)
                {
                    this.Label_MensajeErrorDesactivarUsuario.Text = "Intente desactivar este usuario luego";
                }
            }
            else 
            {
                this.Label_MensajeErrorDesactivarUsuario.Text = "No puede desactivarse a usted mismo!";
            }
        }
        protected void Button_ActivarUsuario_Click(object sender, EventArgs e)
        {
            try 
            {
                ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.ActivarUsuarioEmpresa(Convert.ToInt32(this.GridView_UsuariosInactivos.Rows[this.GridView_UsuariosInactivos.SelectedIndex].Cells[1].Text));

                this.Response.Redirect("Perfil.aspx");
            }
            catch (Exception) 
            {
                this.Label_MensajeErrorReactivarUsuario.Text = "Intente desactivar este usuario luego";
            }
        }
        protected void Button_CrearUsuario_Click(object sender, EventArgs e)
        {
            if (this.TextBox_UserNameNuevoUsuario.Text.Trim() == "" || this.TextBox_PassWordNuevoUsuario.Text.Trim() == "")
            {
                this.Label_MensajeErrorNuevoUsuario.Text = "Debe llenar ambos campos";
                return;
            }

            try
            {
                new UsuarioEmpresa(this.TextBox_UserNameNuevoUsuario.Text, this.TextBox_PassWordNuevoUsuario.Text, ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.ID).Insertar();
                ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Usuarios = null;

                this.Response.Redirect("Perfil.aspx");
            }
            catch (Exception)
            {
                this.Label_MensajeErrorNuevoUsuario.Text = "Este usuario ya existe";
            }
        }

        protected void DropDownList_TiposContactos_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.TextBox_NuevoContacto.Text.Trim() != "")
            {
                this.Button_AñadirContacto.Enabled = true;
            }
            if (this.DropDownList_TiposContactos.SelectedValue == "0")
            {
                this.Button_AñadirContacto.Enabled = false;
            }
        }
        protected void TextBox_NuevoContacto_TextChanged(object sender, EventArgs e)
        {
            if (this.DropDownList_TiposContactos.SelectedValue != "0")
            {
                this.Button_AñadirContacto.Enabled = true;
            }
            if (this.TextBox_NuevoContacto.Text.Trim() == "")
            {
                this.Button_AñadirContacto.Enabled = false;
            }
        }
        protected void DropDownList_ContactosDeUsuario_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Button_EliminarContacto.Enabled = true;

            if (this.DropDownList_ContactosDeUsuario.SelectedValue == "0")
            {
                this.Button_EliminarContacto.Enabled = false;
            }
        }
        protected void GridView_UsuariosActivos_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Button_DesactivarUsuario.Enabled = true;
        }
        protected void GridView_UsuariosInactivos_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.Button_ActivarUsuario.Enabled = true;
        }

        private void PoblarCampos_Perfil()
        {
            this.TextBox_RNC.Text = ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.RNC;
            this.TextBox_Nombre.Text = ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Nombre;

            if (!(this.IsPostBack))
            {
                this.TextBox_Direccion.Text = ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Direccion;
                this.TextBox_Descripcion.Text = ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Descripcion;
            }
        }
        private void PoblarCampos_Contactos()
        {
            this.PoblarTextBox_Contactos();
            this.PoblarDropDownList_ContactosDeUsuario();
        }
        private void PoblarCampos_Usuarios() 
        {
            this.PoblarGridView_UsuariosActivos();
            this.PoblarGridView_UsuariosInactivos();
        }

        private void PoblarTextBox_Contactos()
        {
            this.TextBox_Contactos.Text = "";
            foreach (Contacto item in ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Contactos)
            {
                this.TextBox_Contactos.Text += item.TipoContacto + " -> " + item.Descripcion + "\n";
            }
        }
        private void PoblarDropDownList_ContactosDeUsuario()
        {
            if (this.DropDownList_ContactosDeUsuario.Items.Count == 1)
            {
                foreach (Contacto item in ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Contactos)
                {
                    this.DropDownList_ContactosDeUsuario.Items.Add(new ListItem(item.Descripcion, item.ID.ToString()));
                }
            }
        }
        private void PoblarGridView_UsuariosActivos()
        {
            var UsuariosActivosSource = from ue in ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Usuarios
                                        where ue.SiActivo == true
                                        select new
                                        {
                                            ID = ue.ID,
                                            UserName = ue.UserName,
                                            FechaCreacion = ue.FechaCreacion,
                                            FechaPrimerIngreso = ue.FechaPrimerIngreso,
                                            FechaUltimoIngreso = ue.FechaUltimoIngreso
                                        };
 
            this.GridView_UsuariosActivos.DataSource = UsuariosActivosSource;
            this.GridView_UsuariosActivos.DataBind();
            //this.HideUnwantedColumns();          // this shit just wont work!
        }
        private void PoblarGridView_UsuariosInactivos()
        {
            var UsuariosInactivosSource = from ue in ((UsuarioEmpresa)this.Session["UsuarioDeSesion"]).EmpresaProcedencia.Usuarios
                                          where ue.SiActivo == false
                                          select new
                                          {
                                              ID = ue.ID,
                                              UserName = ue.UserName,
                                              FechaCreacion = ue.FechaCreacion,
                                              FechaPrimerIngreso = ue.FechaPrimerIngreso,
                                              FechaUltimoIngreso = ue.FechaUltimoIngreso
                                          };

            if (UsuariosInactivosSource.Count() == 0)
            {
                //Lo ideal seria poner la propiedad Visible = true. pero asp se pajarea
                this.Label_MensajeErrorNoUsuariosInactivos.Text = "Su empresa no tiene usuarios inactivos";
            }
            else
            {
                this.Label_MensajeErrorNoUsuariosInactivos.Text = "";
            }

            this.GridView_UsuariosInactivos.DataSource = UsuariosInactivosSource;
            this.GridView_UsuariosInactivos.DataBind();
            //this.HideUnwantedColumns();          // this shit just wont work!
        }

        protected void Button_MostrarPanelPerfil_Click(object sender, EventArgs e)
        {
            this.Panel_Perfil.Visible = !(this.Panel_Perfil.Visible);
        }
        protected void Button_MostrarPanelContactos_Click(object sender, EventArgs e)
        {
            this.Panel_Contactos.Visible = !(this.Panel_Contactos.Visible);
        }
        protected void Button_MostrarPanelUsuariosEmpresa_Click(object sender, EventArgs e)
        {
            this.Panel_UsuariosEmpresa.Visible = !(this.Panel_UsuariosEmpresa.Visible);
        }
    }
}
